]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dbusServices/extensions: Load preferences as module
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 2 Jun 2023 02:12:34 +0000 (04:12 +0200)
committerMarge Bot <marge-bot@gnome.org>
Thu, 6 Jul 2023 18:41:29 +0000 (18:41 +0000)
Now that extensions themselves are imported as modules, do the
same for their preference dialogs.

Extensions must now export a class with a `fillPreferencesWindow()`
method as default.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2795>

js/dbusServices/extensions/extensionPrefsDialog.js

index a16476e78b6bef47d0e8d88e1f1a95d40a93ce37..404cbbeac3716a48aa8b0eac5fa5ee3478cafaf8 100644 (file)
@@ -18,29 +18,24 @@ export const ExtensionPrefsDialog = GObject.registerClass({
             search_enabled: false,
         });
 
-        try {
-            ExtensionUtils.installImporter(extension);
+        this._loadPrefs(extension).catch(e => {
+            this._showErrorPage(e);
+            logError(e, 'Failed to open preferences');
+        });
+    }
 
-            // give extension prefs access to their own extension object
-            ExtensionUtils.setCurrentExtension(extension);
+    async _loadPrefs(extension) {
+        // give extension prefs access to their own extension object
+        ExtensionUtils.setCurrentExtension(extension);
 
-            const prefsModule = extension.imports.prefs;
-            prefsModule.init(extension.metadata);
+        const prefsJs = extension.dir.get_child('prefs.js');
+        const prefsModule = await import(prefsJs.get_uri());
 
-            if (prefsModule.fillPreferencesWindow) {
-                prefsModule.fillPreferencesWindow(this);
+        const prefsObj = new prefsModule.default(extension.metadata);
+        prefsObj.fillPreferencesWindow(this);
 
-                if (!this.visible_page)
-                    throw new Error('Extension did not provide any UI');
-            } else {
-                const widget = prefsModule.buildPrefsWidget();
-                const page = this._wrapWidget(widget);
-                this.add(page);
-            }
-        } catch (e) {
-            this._showErrorPage(e);
-            logError(e, 'Failed to open preferences');
-        }
+        if (!this.visible_page)
+            throw new Error('Extension did not provide any UI');
     }
 
     set titlebar(w) {
@@ -64,23 +59,6 @@ export const ExtensionPrefsDialog = GObject.registerClass({
         const extension = ExtensionUtils.getCurrentExtension();
         this.add(new ExtensionPrefsErrorPage(extension, e));
     }
-
-    _wrapWidget(widget) {
-        if (widget instanceof Adw.PreferencesPage)
-            return widget;
-
-        const page = new Adw.PreferencesPage();
-        if (widget instanceof Adw.PreferencesGroup) {
-            page.add(widget);
-            return page;
-        }
-
-        const group = new Adw.PreferencesGroup();
-        group.add(widget);
-        page.add(group);
-
-        return page;
-    }
 });
 
 const ExtensionPrefsErrorPage = GObject.registerClass({